package Sync;
import java.io.File;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;

/**
 * 存储目录数据
 */
public class DirsData {
    private LinkedHashMap<String, File> dirs;

        // 构造方法
    public DirsData(File rootDir, String rootDirName) {

       this.dirs =new LinkedHashMap<>();
       this.dirs.put(rootDirName,rootDir);

    }
    /**
     * 将一个Map集合添加到dirs中
     * @param map 要添加的Map集合
     */
    public void addMapToDirs(LinkedHashMap<String, File> map) {
        if (map != null && !map.isEmpty()) {
            dirs.putAll(map);
        }
    }


    /**
     * 判断目录集合是否为空
     * @return 如果集合为空返回 true，否则返回 false
     */
    public boolean isDirsEmpty() {
        return  dirs.isEmpty();
    }
    // 从 dirs 获取所有 key 的方法
    public List<String> getKeysFromDirs() {
        return new ArrayList<>(dirs.keySet());
    }

    /**
     * 根据键获取值，并从集合中删除该键值对
     * @param key 键
     * @return 对应的值，如果键不存在则返回null
     */
    public File pollDirByKey(String key) {
        if (dirs.containsKey(key)) {
            File value = dirs.get(key);
            dirs.remove(key);
            return value;
        }
        return null;
    }

    // set方法
    public void setDirs(LinkedHashMap<String, File> dirs) {
        this.dirs = dirs;

    }




    /**
     * 递归获取所有子目录
     * @param rootDir 根目录
     * @param relativePath 相对于根目录的路径
     * @return 所有目录的集合，键为相对路径，值为File对象
     */
    public LinkedHashMap<String, File> collectAllDirectoriesRecursively(File rootDir, String relativePath) {
        LinkedHashMap<String, File> dirMap = new LinkedHashMap<>();

        // 如果是根目录，不添加根目录的名字
        String currentPath;
        if (relativePath.equals("NoRootDirName")) {
            currentPath = ""; // 根目录不添加名字
        } else {
            currentPath = relativePath + rootDir.getName() + File.separator;
        }

        // 添加当前目录到 map 中
        if (!currentPath.isEmpty()) {
            dirMap.put(currentPath, rootDir);
        }

        // 遍历当前目录下的所有子文件/子目录
        File[] files = rootDir.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file != null && file.isDirectory()) {
                    // 递归处理子目录
                    LinkedHashMap<String, File> subDirs = collectAllDirectoriesRecursively(file, currentPath);
                    dirMap.putAll(subDirs);
                }
            }
        }

        return dirMap;
    }
    }


